
#include "RingQueue.hpp"
#include <unistd.h>
#include <pthread.h>
#include <cstdlib>
#include <ctime>
using namespace std;

// 消费者线程函数：消费数据
void* Consumer(void* args) 
{
    RingQueue<int>* rq = static_cast<RingQueue<int>*>(args);
    while (true) 
    {
        int data = 0;
        rq->pop(data); // 消费数据
        cout << "Consumer get data: " << data << endl; // 消费者输出
        sleep(1); // 模拟消费耗时
    }
    return nullptr;
}

// 生产者线程函数：生产数据
void* Productor(void* args) 
{
    RingQueue<int>* rq = static_cast<RingQueue<int>*>(args);
    while (true) 
    {
        int data = rand() % 10 + 1; // 生成 1-10 的随机数
        rq->push(data); // 生产数据
        cout << "Productor put data: " << data << endl; // 生产者输出
        sleep(1); // 模拟生产耗时
    }
    return nullptr;
}

int main() {
    srand((unsigned int)time(nullptr)); // 初始化随机数种子

    RingQueue<int>* rq = new RingQueue<int>();
    pthread_t consumer_tid, productor_tid;

    // 创建消费者线程和生产者线程
    pthread_create(&consumer_tid, nullptr, Consumer, rq);
    pthread_create(&productor_tid, nullptr, Productor, rq);

    // 等待线程结束（实际不会结束，因为是死循环）
    pthread_join(consumer_tid, nullptr);
    pthread_join(productor_tid, nullptr);

    delete rq;
    return 0;
}